查看原文
其他

穿山甲Amardillo保护分析

ejamse 看雪学院 2019-05-25

偶然看了飘云阁Rooking大神的Armadillo脱壳视频,深受启发。


在此文中将试炼过程记录下来,与大家分享!


 一、PIMOne6.0


 ExeinfoPE查壳,显示为:

Armadillo 6.0x - 7.0 (exe) 32bit - www.siliconrealms.com *ACM


1、复制ArmAccess.dll到目标主程序PIMOne.exe目录;


2、OD载入目标PIMOne.exe,忽略所有异常,隐藏OD。

Ctrl+G转到KERNELBA.VirtualProtect,在段尾75A21B48 \. C2 1000 retn 10下断;
Ctrl+G转到kernel32.CreateThread,在段尾75CEDE93 \. C2 1800 retn 18下断;


3、先禁用上面两个断点,F9运行,弹窗三次点OK,并Shift+F9运行,出现试用弹窗,此时先激活上面两个断点,再点OK,停在75A21B48,观察堆栈。

00129490 01A2FD43 返回到 01A2FD43 来自 kernel32.VirtualProtect
00129494 00401000 PIMOne.00401000;重要标志


4、单步F7(F8)返回到:

01A9FD43 8B8D 28D8FFFF mov ecx,dword ptr ss:[ebp-27D8]


在该行右键点数据窗口跟随:

01A2FD43 8B 8D 28 D8 FF FF 51 8B 95 24 D8 FF FF 52 8B 85 媿(?Q嫊$?R媴
Ctrl+B查找ASCII码ArmAccess找到
01A6D72C 41 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00 ArmAccess.DLL...
01A6D73C 41 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C ArmAccess....dll


改成:

01A6D72C 56 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00 VrmAccess.DLL...
01A6D73C 56 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C VrmAccess....dll


5、(壳已自解码)反汇编窗口Ctrl+B查找74??6800010000(两个都不勾选)找到:

01A307E9 /74 4A je short 01A30835
01A307EB |68 00010000 push 100
01A307F0 |8D95 F4C3FFFF lea edx,dword ptr ss:[ebp-3C0C]
01A307F6 |52 push edx
01A307F7 |8B85 F4C4FFFF mov eax,dword ptr ss:[ebp-3B0C]
01A307FD |8B08 mov ecx,dword ptr ds:[eax]
01A307FF |51 push ecx
01A30800 |E8 4BDC0000 call 01A3E450
跟随进入01A30800的CALL找到段首
01A3E450 55 push ebp
改成
01A3E450 C3 retn


6、F9运行,断在75A21B48,禁用此断点,继续F9断在75CEDE93,也禁用此断点。F7(F8)返回到:

01A0713C 50 push eax
01A0713D FF15 5C83A601 call dword ptr ds:[1A6835C]; kernel32.CloseHandle
01A07143 5E pop esi
01A07144 5B pop ebx
01A07145 8BE5 mov esp,ebp
01A07147 5D pop ebp
01A07148 C3 retn


7、继续F8单步直到返回:

01A3523F 83C4 04 add esp,4
向下找到
01A35345 FFD0 call eax;段尾最近的CALL
01A35347 8945 FC mov dword ptr ss:[ebp-4],eax
01A3534A 8B45 FC mov eax,dword ptr ss:[ebp-4]
01A3534D 5E pop esi
01A3534E 8BE5 mov esp,ebp
01A35350 5D pop ebp
01A35351 C3 retn


8、点01A35345这一行F4,再F7跟入到达OEP=0063374C,此时用LordPE(修正大小)来Dump为dumped.exe,填入OEP:23374C,ImportREC自动方式获取API,剪切多余项,转存为dumped_.exe,OK。



二、Print2Flash4

   

 ExeinfoPE查壳,显示为:

Armadillo Pro Version v9.64 [ Private build stub ] 06-09-2013 - *www.siliconrealms.com *ACM


1、复制ArmAccess.dll到目标主程序print2f4.exe目录;


2、OD载入目标print2f4.exe,忽略所有异常,隐藏OD。

Ctrl+G转到KERNELBA.VirtualProtect,在段尾75A21B48 \. C2 1000 retn 10下断;
Ctrl+G转到kernel32.CreateThread,在段尾75CEDE93 \. C2 1800 retn 18下断;


3、多次F9运行,弹窗三次点OK,并Shift+F9运行,停在75A21B48,观察堆栈:

00129010 01FC9D87 返回到 01FC9D87 来自 kernel32.VirtualProtect
00129014 00401000 print2f4.00401000;重要标志


4、单步F7(F8)返回到:

01F59D87 8B8D B0D4FFFF mov ecx,dword ptr ss:[ebp-2B50]


在该行右键点数据窗口跟随:

01F59D87 8B 8D B0 D4 FF FF 51 8B 95 AC D4 FF FF 52 8B 85 媿霸Q嫊R
Ctrl+B查找ASCIIArmAccess找到
0202B348 41 72 6D 41 63 63 65 73 73 36 34 2E 44 4C 4C 00 ArmAccess64.DLL.
0202B358 41 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00 ArmAccess.DLL...
0202B368 41 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C ArmAccess....dll


改成:

0202B348 56 72 6D 41 63 63 65 73 73 36 34 2E 44 4C 4C 00 VrmAccess64.DLL.
0202B358 56 72 6D 41 63 63 65 73 73 2E 44 4C 4C 00 00 00 VrmAccess.DLL...
0202B368 56 72 6D 41 63 63 65 73 73 00 00 00 2E 64 6C 6C VrmAccess....dll


5、交替F9、F7(F8)运行到壳自解码(出现红字),停在:

01F5AEB9 6A 14 push 14
反汇编窗口Ctrl+B查找74??6800010000(两个都不勾选)找到
01F5B145 /74 4A je short 01F5B191
01F5B147 |68 00010000 push 100
01F5B14C |8D85 ECBFFFFF lea eax,dword ptr ss:[ebp+FFFFBFEC]
01F5B152 |50 push eax
01F5B153 |8B8D ECC0FFFF mov ecx,dword ptr ss:[ebp-3F14]
01F5B159 |8B11 mov edx,dword ptr ds:[ecx]
01F5B15B |52 push edx
01F5B15C |E8 AFFA0100 call 01F7AC10


跟随进入01F5B15C的CALL找到段首:

01F7AC10 55 push ebp
改成
01F7AC10 C3 retn


6、F9运行,断在75A21B48,禁用此断点,继续F9断在75CEDE93,也禁用此断点。F7(F8)返回到:

01F3CC0F 50 push eax
01F3CC10 FF15 98830202 call dword ptr ds:[2028398]; kernel32.CloseHandle
01F3CC16 5E pop esi
01F3CC17 5B pop ebx
01F3CC18 8BE5 mov esp,ebp
01F3CC1A 5D pop ebp
01F3CC1B C3 retn


7、继续F8单步直到返回:

01F61B71 83C4 04 add esp,4
向下找到
01F61CE5 FFD2 call edx;段尾最近的CALL
01F61CE7 8945 FC mov dword ptr ss:[ebp-4],eax
01F61CEA 8B45 FC mov eax,dword ptr ss:[ebp-4]
01F61CED 5E pop esi
01F61CEE 8BE5 mov esp,ebp
01F61CF0 5D pop ebp
01F61CF1 C3 retn


8、点01F61CE5这一行F4,再F7跟入到达OEP=006A30D8,此时用LordPE(修正大小)来Dump为dumped.exe,填入OEP:2A30D8,ImportREC自动方式获取API,级别1修复,剪切多余项,转存为dumped_.exe运行73571304出错。


9、老OD找到73571304出错的地方:

0040F4C0 - FF25 78916B00 jmp dword ptr ds:[6B9178]; msimg32.GradientFill
ds:[006B9178]=73571304 (msimg32.GradientFill)


新OD载入dumped_.exe此处缺函数名,故在老OD用UIF修复,新IAT放在006B8000段,重新dump并用ImportREC修复转存,OK。



- End -


看雪ID:ejamse            

https://bbs.pediy.com/user-528840.htm



本文由看雪论坛 ejamse 原创

转载请注明来自看雪社区



热门图书推荐:

立即购买!




(晋级赛Q1即将于24日结束~!)



热门文章阅读


1、挖掘ruckus路由器漏洞总结的几个点

2、已更新至第8章 | LLVM编译框架详解

3、全面详解 Ghidra

4、简单高效开发你的shellcode不是梦!



公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com



点击下方“阅读原文”

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存